<?php
if (!defined('BASEPATH'))
    exit('No direct script access allowed');

class Administration extends CI_Controller {

    public function __construct() {        
        parent::__construct();
        if (!isset($this->session->userdata['utilisateur_id']))
            exit('No direct script access allowed');
    }


    public function index() {
        page('Administration/index', 'Administration', null);
    }

    public function Utilisateurs() {       
        $crud = new grocery_CRUD();

        $crud->set_table('t_utilisateur')
             ->set_subject('un utilisateur')
                
             ->columns('societe', 'utilisateur_nom_entier', 'utilisateur_email', 'utilisateur_actif')                
                
             ->set_relation_n_n('societe', 'a_contacter', 't_societe', 'utilisateur_id', 'societe_id', 'societe_raison_sociale')
                                
             ->callback_column('utilisateur_actif', array($this, 'Image_actif'))
             ->display_as('utilisateur_nom', 'Nom')
             ->display_as('utilisateur_prenom', 'Prénom')
             ->display_as('utilisateur_email', 'Email')
             ->display_as('utilisateur_password', 'Mot de passe')
             ->display_as('utilisateur_actif', 'Actif')

             ->fields('societe', 'utilisateur_nom', 'utilisateur_prenom', 'utilisateur_nom_entier', 'utilisateur_email', 'utilisateur_password', 'utilisateur_actif')
             ->required_fields('societe', 'utilisateur_nom', 'utilisateur_prenom', 'utilisateur_email', 'utilisateur_password')
             ->change_field_type('utilisateur_password', 'password')
             ->set_rules('utilisateur_email', 'Email', 'trim|valid_email|required')
                
             // Le champ UTILISATEUR_NOM_ENTIER n'à pas forcément besoin
             // d'apparaître dans le formulaire pour être pris en compte et enregistré en base: c'est cool !
             ->change_field_type('utilisateur_nom_entier', 'hidden')
                
             ->callback_before_insert(array($this,'insert_full_name'));

        $crud->order_by('t_utilisateur.utilisateur_nom', 'ASC');
        
        $output = $crud->render();
        
        // print_r($output);
        page('Crud/crud', 'Administration des utilisateurs', $output);
    }
    
    // Fonction qui concatène le prénom et le nom de l'utilisateur (+ court à l'affichage);
    public function insert_full_name($post_array)
    {
        // La condition peut maintenant être enlevée puisque le champs est "hidden" dans le formulaire
        if(empty($post_array['utilisateur_nom_entier']))
        {
            $post_array['utilisateur_nom_entier'] = $post_array['utilisateur_prenom']." ".$post_array['utilisateur_nom'];
        }
        return $post_array;
    }
    
    public function Groupes_utilisateurs() {
        $crud = new grocery_CRUD();

        $crud->set_table('t_utilisateur_group')
             ->set_subject('un groupe d\'utilisateurs')
             ->columns('utilisateur_group_libelle', 'utilisateur_group_actif')
             ->callback_column('utilisateur_group_actif', array($this, 'Image_actif'))
             ->display_as('utilisateur_group_libelle', 'Nom du groupe')
             ->display_as('utilisateur_group_actif', 'Actif')
             ->fields('utilisateur_group_libelle', 'utilisateur_group_actif')
             ->required_fields('utilisateur_group_libelle');

        $crud->order_by('t_utilisateur_group.utilisateur_group_libelle', 'ASC');
        
        $output = $crud->render();
        page('Crud/crud', 'Administration des types de sociétés', $output);
    }
    
    public function Droits() {
        $crud = new grocery_CRUD();

        $crud->set_table('t_droit')
             ->set_subject('un droit')
             ->columns('droit_libelle', 'droit_actif')
             ->callback_column('droit_actif', array($this, 'Image_actif'))
             ->display_as('droit_libelle', 'Nom du droit')
             ->display_as('droit_actif', 'Actif')
             ->fields('droit_libelle', 'droit_actif')
             ->required_fields('droit_libelle');

        $crud->order_by('t_droit.droit_libelle', 'ASC');
        
        $output = $crud->render();
        page('Crud/crud', 'Administration des droits', $output);
    }

    public function Societes() {
        $crud = new grocery_CRUD();

        $crud->set_table('t_societe')
             ->set_subject('une société')
             ->columns('societe_type_id', 'societe_raison_sociale', 'societe_adresse', 'societe_cp', 'societe_pays', 'societe_actif')
                
             ->set_relation('societe_type_id', 't_societe_type', 'societe_type_libelle')
             ->set_relation_n_n('employes', 'a_contacter', 't_utilisateur', 'societe_id', 'utilisateur_id', 'utilisateur_nom_entier')
                
             ->callback_column('societe_actif', array($this, 'Image_actif'))
             ->display_as('societe_raison_sociale', 'Raison Sociale')
             ->display_as('societe_adresse', 'Adresse')
             ->display_as('societe_cp', 'Code Postal')
             ->display_as('societe_pays', 'Pays')
             ->display_as('societe_tel', 'Téléphone')
             ->display_as('societe_fax', 'Fax')
             ->display_as('societe_numero_siret', 'Numéro Siret')
             ->display_as('societe_code_ape', 'Code APE')
             ->display_as('societe_capital', 'Capital')
             ->display_as('societe_tva', 'TVA')
             ->display_as('societe_email', 'Email')
             ->display_as('societe_site', 'Site')
             ->display_as('societe_actif', 'Actif')
             ->display_as('societe_type_id', 'Type')
             ->fields('societe_type_id', 'societe_raison_sociale', 'employes', 'societe_adresse', 'societe_adresse_compl', 'societe_cp', 'societe_pays', 'societe_tel', 'societe_fax', 'societe_numero_siret', 'societe_code_ape', 'societe_capital', 'societe_tva', 'societe_email', 'societe_site', 'societe_actif')
             ->required_fields('societe_type_id', 'societe_raison_sociale', 'societe_adresse', 'societe_cp', 'societe_pays');

        $crud->order_by('t_societe.societe_raison_sociale', 'ASC');        
        
        // ON AJOUTE AUSSI LES DONNEES DANS "T_HISTO_SOCIETE"        
        $crud->callback_after_insert( array( $this, 'societe_after_insert' ) );
        
        $output = $crud->render();
        page('Crud/crud', 'Administration des sociétés', $output);
        //print_r($output);
    }

    public function Types_societes() {
        $crud = new grocery_CRUD();

        $crud->set_table('t_societe_type')
             ->set_subject('un type de société')
             ->columns('societe_type_libelle', 'societe_type_actif')
             ->callback_column('societe_type_actif', array($this, 'Image_actif'))
             ->display_as('societe_type_libelle', 'Nom du type')
             ->display_as('societe_actif', 'Actif')
             ->fields('societe_type_libelle', 'societe_type_actif')
             ->required_fields('societe_type_libelle');

        $crud->order_by('t_societe_type.societe_type_libelle', 'ASC');
        
        $output = $crud->render();
        page('Crud/crud', 'Administration des types de sociétés', $output);
    }
    
    // Agit sur la ligne de Production
    public function Processus_lignes_production() {

        $crud = new grocery_CRUD();

        $crud->set_table('t_processus')
             ->set_subject('un processus de Ligne')
			
             ->columns('processus_libelle')
				
             ->display_as('processus_libelle', 'Processus')
                
			 ->fields('processus_libelle')				
             ->required_fields('processus_libelle');

        $crud->order_by('t_processus.processus_libelle', 'ASC');
				
        $output = $crud->render();
		// print_r($output);
        page('Crud/crud', 'Gestion des Processus', $output);		
    }
    
    // Lignes de Production
    public function Lignes_production() {

        $crud = new grocery_CRUD();

        $crud->set_table('t_ligne_prod')
             ->set_subject('une ligne de Production')
				
			// FAIRE ATTENTION EN BASE : REMPLACER _ACTIVE PAR _ACTIF (COMME TOUS LES AUTRES)
             ->columns('ligne_prod_libelle', 'chaine_production_id', 'ligne_prod_active')                                
			 ->callback_column('ligne_prod_active', array($this, 'Image_actif'))
				
			 ->set_relation('chaine_production_id', 't_chaine_production', 'chaine_production_nom')
				
			 ->display_as('ligne_prod_libelle', 'Ligne de Production')
			 ->display_as('chaine_production_id', 'Chaine de Production')
             ->display_as('ligne_prod_active', 'Actif')
                
			 ->fields('ligne_prod_libelle', 'chaine_production_id', 'ligne_prod_active')
                
             ->required_fields('ligne_prod_libelle', 'chaine_production_id', 'ligne_prod_active');
				
		$crud->order_by('t_ligne_prod.ligne_prod_libelle', 'ASC');
		
        $output = $crud->render();

        page('Crud/crud', 'Gestion des Lignes de Production', $output);
		//print_r($output);
    }
    
    // Chaines de Production
    public function Chaines_production() {
        $crud = new grocery_CRUD();

        $crud->set_table('t_chaine_production')
             ->set_subject('une chaîne de production')
             ->columns('chaine_production_nom', 'chaine_prod_etat_id',
                          //'chaine_production_marche',
                          'chaine_production_actif')
             ->set_relation('chaine_prod_etat_id', 't_chaine_prod_etat', 'chaine_prod_etat_libelle')
             ->callback_column('chaine_production_actif', array($this, 'Image_actif'))
             //->callback_column('chaine_production_marche', array($this, 'Image_actif'))
             ->display_as('chaine_production_nom', 'Nom de la chaîne')
             //->display_as('chaine_production_marche', 'En fonctionnement')
             ->display_as('chaine_production_actif', 'Actif')
             ->display_as('chaine_prod_etat_id', 'Etat')
             ->fields('chaine_prod_etat_id', 'chaine_production_nom',
                      //'chaine_production_marche',
                      'chaine_production_actif')
             ->required_fields('chaine_prod_etat_id','chaine_production_libelle');

        $crud->order_by('t_chaine_production.chaine_production_nom', 'ASC');
        
        $output = $crud->render();
        page('Crud/crud', 'Administration des chaînes de production', $output);
    }
    
    // Agit sur les chaines de Production
    public function Etat_chaines_production() {
        $crud = new grocery_CRUD();

        $crud->set_table('t_chaine_prod_etat')
             ->set_subject('un état')
             ->columns('chaine_prod_etat_libelle', 'chaine_prod_etat_actif')
             ->callback_column('chaine_prod_etat_actif', array($this, 'Image_actif'))
             ->display_as('chaine_prod_etat_libelle', 'Nom de l\'état de la chaîne de production')
             ->display_as('chaine_prod_etat_actif', 'Actif')
             ->fields('chaine_prod_etat_libelle', 'chaine_prod_etat_actif')
             ->required_fields('chaine_prod_etat_libelle');
                
        $crud->order_by('t_chaine_prod_etat.chaine_prod_etat_libelle', 'ASC');

        $output = $crud->render();
        page('Crud/crud', 'Administration des états des chaînes de production', $output);
    }
    
    /************************************* CALLBACKS *************************************/
    
    public function societe_after_insert( $post_array ) {
		
        //var_dump($post_array);
        
        $data = array(
                      'histo_soc_type'               => $post_array['societe_type_id'],
                      'histo_soc_raison_sociale'     => $post_array['societe_raison_sociale'],
                      'histo_soc_adresse'            => $post_array['societe_adresse'],
                      'histo_soc_adresse_compl'      => $post_array['societe_adresse_compl'],
                      'histo_soc_cp'                 => $post_array['societe_cp'],
                      'histo_soc_pays'               => $post_array['societe_pays'],                     
                      'histo_soc_email'              => $post_array['societe_email'],
                      'histo_soc_contact_nom_prenom' => '',
                      'histo_soc_contact_mail'       => ''                      
        );
			
        // ON AJOUTE LA SOCIETE CREEE DANS L'HISTORIQUE        
        $this->db->insert( 't_histo_societe', $data );					
        
		return $post_array;		
	}

    function Image_actif($value, $row) {
        if ($value == 't')
            return '<IMG SRC="' . base_url() . 'assets/img/ok.png" ALT="Actif" TITLE="Actif">';
        else if ($value == 'f')
            return '<IMG SRC="' . base_url() . 'assets/img/nok.png" ALT="Non actif" TITLE="Non actif">';
        else
            return '<IMG SRC="' . base_url() . 'assets/img/nok.png" ALT="Non actif" TITLE="Non actif">';
    }

}
